주어진 항공권을 모두 이용하여 여행경로를 짜려고 합니다. 항상 “ICN” 공항에서 출발합니다.
항공권 정보가 담긴 2차원 배열 tickets가 매개변수로 주어질 때, 방문하는 공항 경로를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
tickets | return |
---|---|
[[“ICN”, “JFK”], [“HND”, “IAD”], [“JFK”, “HND”]] | [“ICN”, “JFK”, “HND”, “IAD”] |
[[“ICN”, “SFO”], [“ICN”, “ATL”], [“SFO”, “ATL”], [“ATL”, “ICN”], [“ATL”,”SFO”]] | [“ICN”, “ATL”, “ICN”, “SFO”, “ATL”, “SFO”] |
저는 공항과 티켓을 클래스로 생성해서 해결했습니다.
따로 클래스를 생성하지 않고 해결하시는 분들도 많으시더라구요! 저도 그 방법으로 다시 풀어보긴 했지만 먼저 사용했던 방법이 뭔가 정점 - 간선의 관계를 객체지향으로 잘 표현한 것 같아 제 입장에선 이해가 더 쉬웠던 거 같아요!
그래서 전 클래스를 생성해 해결한 방법을 포스팅했습니다.
우선 알파벳 순서로 정렬하는 과정은 두 가지 타이밍이 있습니다.
저는 첫 번째 타이밍에 정렬을 수행했습니다. 이 경우 DFS를 돌며 최종적으로 나온 루트가 자동적으로 정렬된 루트가 되며 여러 개의 루트를 저장할 필요 없이, 최초로 생성된 루트를 채택하면 됩니다.
두 번째 방법으로 정렬하는 것은 가짓수가 적어질 수 있어 더 효율적일 수 있으나 모든 루트를 저장 후, 마지막에 정렬해야 해서 루트를 저장하는 자료형에 있어 한정적일 수 있습니다.
DFS를 수행하며 여행 경로대로 저장된 String 배열을 리턴합니다.
Method | Return | Description |
---|---|---|
solution(String[][] tickets) | String[] | 최초 티켓 정보를 입력 받아 여행 경로를 담은 String 배열을 반환 |
DFS(int N, Airport begin) | String[] | 티켓 개수(N)와 출발지점을 입력 받아 rDFS를 호출합니다. |
rDFS(int N, int cnt, Airport begin, String[] visited) | int | DFS를 수행하는 재귀 함수로, 입력 받은 visited 배열에 저장합니다. |
rDFS의 cnt는 저장된 여행지 개수이며, 모든 티켓을 사용하면 N+1이 됩니다. cnt 값을 유지하기 위해 cnt 값을 return해 줍니다.
사용 연어: Java
테스트 | 메모리 | 시간 |
---|---|---|
1 | 53.1 MB | 0.80 ms |
2 | 52.3 MB | 0.66 ms |
3 | 52.2 MB | 0.45 ms |
4 | 53.6 MB | 0.46 ms |
감사합니다.
Text by Chaelin. Photographs by Chaelin, Unsplash.